"""
协程（又称为微线程、纤程）

协程的优势：
    1.极高的执行效率（无线程切换，而是由程序自身控制）。
    2.不需要多线程的锁机制（在协程中控制共享资源不加锁，只需要判断状态即可，执行效率比多线程高很多）。

如何利用多核CPU：
    最简单的办法是多进程+协程。

Python对协程的支持是通过generator实现的。

协程的特点：
    子程序就是协程的一种特例。
"""


def consumer():
    """
    消费者协程
    """

    r = ''
    while True:
        n = yield r
        if not n:
            return
        print("[消费者] 开始消费 {n} ...".format(n=n))
        r = "消费成功"


def produce(c):
    # 启动协程
    c.send(None)

    n = 0
    while n < 5:
        n += 1
        print("[生产者] 开始生产 {n} ...".format(n=n))
        r = c.send(n)
        print("[生产者] 消费者返回： {r}".format(r=r))

    # 停止生产
    c.close()


def run():
    c = consumer()
    produce(c)


if __name__ == "__main__":
    run()
